package ar.edu.utn.frgp.banco.menu;


import java.util.List;
import java.util.Scanner;



import ar.edu.utn.frgp.banco.domain.Cuenta;
import ar.edu.utn.frgp.banco.domain.Movimientos;
import ar.edu.utn.frgp.banco.domain.PagoServicio;
import ar.edu.utn.frgp.banco.domain.Servicios;
import ar.edu.utn.frgp.banco.exceptions.ServiceException;


import ar.edu.utn.frgp.banco.service.RecursoServiceCuenta;
import ar.edu.utn.frgp.banco.service.RecursoServiceMovimientos;
import ar.edu.utn.frgp.banco.service.RecursoServicePagoServicios;
import ar.edu.utn.frgp.banco.service.RecursoServiceServicios;


import ar.edu.utn.frgp.banco.service.impl.RecursoServiceCuentaImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceMovimientosImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServicePagoServiciosImpl;
import ar.edu.utn.frgp.banco.service.impl.RecursoServiceServiciosImpl;

public class MenuServicios {
	public void menuServicios() 
	{
		Integer  operacion ;
		Scanner A = new Scanner(System.in);
		do{
			System.out.println(" ");
			System.out.println("1_Pagar Servicio");
	 		System.out.println("2_Listado de Pago de servicio por cuenta");
	 		System.out.println("3_Listado de Servicios");
	 		System.out.println("4_Cargar Servicio");
	 		System.out.println("0_Volver al Menu Principal");
	 	    System.out.println(" ");
	 		System.out.println("Ingrese una Opcion: ");
	 		operacion = A.nextInt();
			
	 		Servicios se = new Servicios();
			RecursoServiceServicios service = new RecursoServiceServiciosImpl();
			Movimientos regMovimiento = new Movimientos();
			RecursoServiceMovimientos serviceMovimientos = new RecursoServiceMovimientosImpl();
			
			
			
			
			switch(operacion)
				{
			   ///////////////////////////////////////////////////////////////////
				case 1: 
					
					Cuenta cu = new Cuenta ();
					PagoServicio regpago = new PagoServicio();
					
					RecursoServiceCuenta serviceCuenta = new RecursoServiceCuentaImpl();
					RecursoServicePagoServicios servicepago = new RecursoServicePagoServiciosImpl();
					
					int  dniCliente;
					int  cuentaCliente;
					int  codigoServicio;
					Scanner dni = new Scanner(System.in);
					Scanner cuenta = new Scanner(System.in);
					Scanner codigo = new Scanner(System.in);
					
					System.out.println("Ingrese el dni del cliente que pagara el servicio");
					dniCliente = dni.nextInt();
					
					// lista las cuentas del cliente ingresado
					try {
						List<Cuenta> cuentas = serviceCuenta.listarCuentasActivas(dniCliente);
						
							for (Cuenta c: cuentas){
								System.out.println("");
								 System.out.println("dni "+ c.getDni());
								 System.out.println("nro cuenta "+ c.getNrocuenta());
								 System.out.println("tipo cuenta "+ c.getTipoCuenta());
								 System.out.println("estado "+ c.getEstado());
								 System.out.println("saldo "+ c.getSaldo());
								 System.out.println("descubierto "+ c.getDescubierto());
								 System.out.println("");
							}
						  } catch (ServiceException e) {
						  System.out.println("Error al listar todas las Cuentas Corrientes . " + e.getMessage());
					}
					
					
					//pide que elija un numero de cuenta
					System.out.println("Ingrese el numero de cuenta para debitar el monto del servicio");
					cuentaCliente = cuenta.nextInt();
					
					//lista los servicios disponibles
					try {
						
						List<Servicios> servicios = service.listarServicios();
						
						for (Servicios c: servicios){
							System.out.println("CODIGO: " + c.getIdservicio());
							System.out.println("DESCRIPCION: " + c.getDescripcion());
							System.out.println("MONTOFIJO: " + c.getMontofijo());
							System.out.println("");
						}
											
					} catch (ServiceException e) {
						System.out.println("Error al listar clientes . " + e.getMessage());
					}
					
					// pide que se elija el codigo de servicio a pagar
					System.out.println("Ingrese el codigo del servicio para abonar");
					codigoServicio = codigo.nextInt();
									
					///// busca la cuenta y el servicio modifica el saldo y registra el pago
				try {
					cu = serviceCuenta.buscarCuenta(cuentaCliente); //busco y traigo la cuenta de la cual se va a debitar el monto
					se = service.buscarServicio(codigoServicio);//busco y traigo el servicio a pagar
					cu.setSaldo(cu.getSaldo()- se.getMontofijo());// modifico el saldo de esa cuenta (saldo de la cuenta - monto fijo del servicio)
					serviceCuenta.modificarSaldoCuenta(cu);/// le mando a modificar saldo cuenta la cuenta con el saldo modificado
					regpago.cargarPagoServicio(codigoServicio, cuentaCliente);//// se carga y registra en pago del servicio en la base de datos pagoservicios
					servicepago.registrarPago(regpago);
					
					regMovimiento.cargarMovimiento(cuentaCliente, 1, 3, cu.getSaldo(),se.getMontofijo());
					serviceMovimientos.registrarMovimiento(regMovimiento);
					
					
				} catch (ServiceException e2) {
					// TODO Auto-generated catch block
					e2.printStackTrace();
				}
									
				break;
				////////////////////////////////////////////////////////////////
				case 2: 
					
					RecursoServicePagoServicios servicepagos = new RecursoServicePagoServiciosImpl();
					
					System.out.println("1. Listado de Servicios Pagos" );
					
					
					try {
						
						List<PagoServicio> serviciospagos = servicepagos.listarServiciosPagos();
						
						for (PagoServicio c: serviciospagos){
							System.out.println("");
							System.out.println("Id pago: " + c.getIdpagoservicio());
							System.out.println("id servicio: " + c.getIdservicio());
							System.out.println("nro cuenta: " + c.getNrocuenta());
							System.out.println("fecha: " + c.getFecha());
							System.out.println("");
						}
						
						
					} catch (ServiceException e) {
						System.out.println("Error al listar los servicios pagos . " + e.getMessage());
					}
				break;
			    ////////////////////////////////////////////////////////////////////		
				case 3:
					System.out.println("1. Listado de Servicios " );
					
					
					try {
						
						List<Servicios> servicios = service.listarServicios();
						
						for (Servicios c: servicios){
							System.out.println("CODIGO: " + c.getIdservicio());
							System.out.println("DESCRIPCION: " + c.getDescripcion());
							System.out.println("MONTOFIJO: " + c.getMontofijo());
							System.out.println("");
						}
						
						
					} catch (ServiceException e) {
						System.out.println("Error al listar clientes . " + e.getMessage());
					}
				break;
				///////////////////////////////////////////////////////////////////////////
				case 4:
					se.cargarServicio();
					try {
						service.crearServicio(se);
					} catch (ServiceException e) {
					System.out.println("Error al crear servicio. " + e.getMessage());
					}
					System.out.println("Funcion Cargar Finalizada");
						
				break;
				///////////////////////////////////////////////////////////////////////////
				case 5: 
				break;
				};		  
				
		}while(operacion != 0);
		
	}
}
